The present invention relates generally to accelerating client-server transactions across a network. Network acceleration appliances and applications apply a variety of techniques to reduce the latency or the appearance of latency over local- and wide-area-networks. Many techniques, such as scalable data referencing as described in McCanne I and McCanne II, can benefit from sending data in a few large network packets, rather than many smaller network packets. Typically, network protocols limit the size of network packets.
It is often desirable to have the largest network packet possible to provide maximum benefit from the network acceleration techniques. However, waiting for servers and applications to produce additional data to be included in a network packet, so as to maximize the size of the network packet, can increase the latency or appearance of latency for the client or application, especially in interactive applications.
One current technique uses an algorithm similar to the Nagle algorithm to automatically concatenate a number of small buffer messages into a single buffer, referred to as Nagling, that can then be sent, or flushed, as a single network packet. In a previous implementation, either a time delay or a buffer size can trigger a buffer flush and the transmission of a network packet with the current buffer data. For example, if a time limit, such as six milliseconds, passes from the first data written to the buffer, or if the buffer reaches a size limit, such as 128 KB of data, then the buffer is flushed and a network packet is sent with the buffer data. The time limit typically triggers buffer flushes for interactive traffic and the size limit typically triggers buffer flushes when there is a steady flow of data from an application.
The time and size limits for buffers are referred to as a framing. With a single framing, there is a single limit to the buffer and a single time limit. A single framing must designed to be reasonable for a wide variety of possible networks or kinds of traffic. Unfortunately, designing such a single framing is difficult because of the enormous variety of both networks and traffic. No single framing performs reasonably well across the diversity of networks and traffic types that might be encountered; even a single installation may encounter widely-varying traffic types, either sequentially or simultaneously.
A single framing can be manually tailored to the needs and characteristics of specific networks and applications, but such tailoring requires both technical sophistication and knowledge of traffic characteristics, and can only happen with the involvement of a technically-knowledgeable user. Even with the necessary level of sophistication, knowledge, and skill, no person is able or willing to adjust the framing characteristics as traffic characteristics shift; the changes can happen too rapidly for human intervention and they happen around the clock. Further, even the fastest adjustments to a single framing are still unable to address the problem of handling simultaneous streams of traffic with very different characteristics.
It is therefore desirable for a system and method for framing network traffic to balance the need to maximize network acceleration efficiency using large network packets with the need to minimize delays in sending network packets while waiting for data to accumulate. It is further desirable for the system and method to be readily applicable to a wide variety of networks and applications. It is also desirable for a system and method to dynamically adjust framings to handle changing characteristics of network traffic. It is still further desirable for the system and method to provide efficient framing for simultaneous streams of network traffic with different characteristics.